﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Persistencia;
using GestorDeFlotasModelo.Entities;
using System.Data.SqlClient;
namespace GestorDeFlotasModelo.Factorias
{
    public class FactoriaFuncionalidadPorRol : Factoria
    {
        private FactoriaFuncionalidadPorRol(TransaccionBase tran)
            : base(tran)
        {
        }
        

        public override string NombreTabla
        {
            get { return " NUESTRA_RUBIA_ES_MEJOR.FuncionalidadPorRol "; }
        }

        protected override IPersistibleModelo NuevoPersistible(HashTableNCSensitive htsNc)
        {
            return new FuncionalidadPorRol(); 
        }

        protected override string Id(HashTableNCSensitive hts)
        {
            return hts["FuncionalidadPorRol_Rol"] + "|" + hts["FuncionalidadPorRol_Funcionalidad"];
        }

        public List<Funcionalidad> SelectFuncionalidadPorRol(Rol rol)
        {
            SqlCommand comm= new SqlCommand();
            comm.CommandText="SELECT * FROM "+this.NombreTabla+" WHERE FuncionalidadPorRol_Rol=@FuncionalidadPorRol_Rol";
            comm.Parameters.AddWithValue("@FuncionalidadPorRol_Rol", rol.Id);
            List<FuncionalidadPorRol> funcionalidadesXRol = base.Select <FuncionalidadPorRol>(comm, delegate(IPersistibleModelo iPer) { return ((FuncionalidadPorRol)iPer).Rol.Id == rol.Id; }, 0);
            List<Funcionalidad> funcionalidades = new List<Funcionalidad>();
            funcionalidadesXRol.ForEach(delegate(FuncionalidadPorRol funcXRol) {funcionalidades.Add(funcXRol.Funcionalidad); });
            return funcionalidades;
        }

        protected override HashTableNCSensitive ParametrosClave()
        {
            HashTableNCSensitive parameters = new HashTableNCSensitive();
            parameters.Add("FuncionalidadPorRol_Rol", null);
            parameters.Add("FuncionalidadPorRol_Funcionalidad", null);
            return parameters;


        }

        protected override HashTableNCSensitive ParametrosNoClave()
        {
            HashTableNCSensitive parameters = new HashTableNCSensitive();
            return parameters;
        }

        protected override Predicate<IPersistibleModelo> FiltroXId(string id)
        {
            return delegate(IPersistibleModelo iPer)
            {
                return ((FuncionalidadPorRol)iPer).Rol.Id == long.Parse(id.Split('|')[0]) &&
                         ((FuncionalidadPorRol)iPer).Funcionalidad.Id == long.Parse(id.Split('|')[1]);
            };
        }

        public FuncionalidadPorRol Nuevo(Funcionalidad func, Rol rol)
        {
            FuncionalidadPorRol fxo = new FuncionalidadPorRol();
            fxo.Funcionalidad = func;
            fxo.Rol = rol;
            base.Agregar(fxo);
            return fxo;
        }
    }
}
